/*
  async 函数是什么？一句话，它就是 Generator 函数的语法糖。

  async函数就是将 Generator 函数的星号（*）替换成async，将yield替换成await，仅此而已。

  内置执行器。(不再需要co模块)
  更好的语义。
  更广的适用性
  返回值是 Promise。
*/

const fs = require("fs");

const delay = (time) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(11111);
    }, time);
  });
};

const read = (url) => {
  return new Promise((resolve, reject) => {
    fs.readFile(url, "utf-8", (err, data) => {
      if (err) throw err;
      resolve(data);
    });
  });
};

// 当我们执行async函数的时候，先往下执行，当遇到await会停下来等待，等待await后面的promise对象出结果，通过赋值的方式直接拿到结果，再往下执行，直到遇到下一个await
const fn = async () => {
  const res = await delay(2000);
  console.log(res);
  const res2 = await read("./01-promise.js");
  console.log(res2);
};

fn().then(() => {
  console.log("所有的任务完成");
});
